package com.zenithmind.version.pojo.domain;

import com.baomidou.mybatisplus.annotation.TableName;
import com.zenithmind.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * 仓库实体类 - 遵循单一职责原则，只包含仓库基本信息
 *
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("version_repository")
@Schema(description = "仓库实体")
public class Repository extends BaseEntity {

    /**
     * 仓库名称
     */
    @Schema(description = "仓库名称")
    private String name;

    /**
     * 仓库描述
     */
    @Schema(description = "仓库描述")
    private String description;

    /**
     * 仓库所有者ID
     */
    @Schema(description = "仓库所有者ID")
    private String ownerId;

    /**
     * 仓库所有者名称
     */
    @Schema(description = "仓库所有者名称")
    private String ownerName;

    /**
     * 仓库类型（1-公开，2-私有，3-内部）
     */
    @Schema(description = "仓库类型（1-公开，2-私有，3-内部）")
    private Integer type;

    /**
     * 仓库状态（0-禁用，1-启用，2-归档）
     */
    @Schema(description = "仓库状态（0-禁用，1-启用，2-归档）")
    private Integer status;

    /**
     * 默认分支
     */
    @Schema(description = "默认分支")
    private String defaultBranch;

    /**
     * 仓库语言
     */
    @Schema(description = "仓库语言")
    private String language;

    /**
     * 仓库标签（JSON格式）
     */
    @Schema(description = "仓库标签（JSON格式）")
    private String tags;

    /**
     * 最后推送时间
     */
    @Schema(description = "最后推送时间")
    private LocalDateTime lastPushTime;

    /**
     * 最后活动时间
     */
    @Schema(description = "最后活动时间")
    private LocalDateTime lastActivityTime;

    /**
     * 排序值
     */
    @Schema(description = "排序值")
    private Integer sortOrder;

    /**
     * 检查仓库是否为公开仓库
     *
     * @return 是否为公开仓库
     */
    public boolean isPublic() {
        return Integer.valueOf(1).equals(this.type);
    }

    /**
     * 检查仓库是否为私有仓库
     *
     * @return 是否为私有仓库
     */
    public boolean isPrivate() {
        return Integer.valueOf(2).equals(this.type);
    }

    /**
     * 检查仓库是否已归档
     *
     * @return 是否已归档
     */
    public boolean isArchived() {
        return Integer.valueOf(2).equals(this.status);
    }

    /**
     * 检查仓库是否启用
     *
     * @return 是否启用
     */
    public boolean isEnabled() {
        return Integer.valueOf(1).equals(this.status);
    }
}
